home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 February
/
EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso
/
earcd
/
comm2
/
zpont311.lha
/
zpoint-3.11
/
Rexx
/
FilterPuffer.zprx
< prev
next >
Wrap
Text File
|
1995-07-18
|
7KB
|
287 lines
/*
$VER: FilterPuffer.zprx 1.3 (2.7.95) Copyright (c) Jürgen Kohrmeyer
Dies ist ein ARexx-Skript für Zodiac's Point, mit dem man einen
empfangenen Netcallpuffer entpacken und filtern kann. Das Script
erkennt automatisch ob der angekommene Puffer ein LhA-Archiv oder
ungepackt ist, entpackt oder kopiert diesen entsprechend in ein
Verzeichnis 'T:WILAM-04431-92081' und filtert dann alle enthaltenen
Einzelpuffer. Die fertig gefilterten Puffer werden im aktuellen
Verzeichnis unter dem Namen 'PUFFER' gespeichert. In dieser Datei
sind alle empfangenen Einzelpuffer hintereinandergehängt enthalten
und können einsortiert werden.
Sie dürfen dieses Skript beliebig kopieren, solange es zusammen
mit Zodiac's Point eingesetzt wird, aber verändern Sie es bitte
nicht ohne Erlaubnis des Autors.
Sie erreichen den Autor wie folgt:
Jürgen Kohrmeyer Tel. : +49 5402 5195
Oststraße 2 EMail: j_kohrmeyer@wilam.north.de
49143 Bissendorf
Hinweise zur Installation:
Kopieren sie dieses Skript in das Rexx-Verzeichnis von ZP und
tragen sie es als Entpacker in Zodiac's Point ein. Rufen Sie dazu
'Konfiguration erstellen oder ändern/Pfade und Kommandos' auf, im
Eingabefeld für den 'Entpacker' tragen Sie folgendes ein:
"SYS:Rexxc/RX Rexx/FilterPuffer.zprx %s %s"
*/
/*
** Hier müssen die kompletten Pfade der Packer LHA, LZX und UNZIP
** eingetragen werden. Für Packer, die nicht verwendet werden, muß
** nichts angegeben werden. Alle Pfade müssen in Anführungszeichen
** oder Hochkommas stehen.
**
*/
lha = 'C:lha'
lzx = 'C:lzx'
unzip = 'C:unzip'
/*
** Hier wird ein Verzeichnis für temporäre Daten angegeben. Auf
** dem Datenträger, der dieses Verzeichnis enthält muß genügend
** Speicherplatz für den gesamten, entpackten Puffer vorhanden
** sein. Der Pfad muß in Anführungszeichen oder Hochkommas stehen.
*/
tempdir = 'T:'
/*
** Beginn des Scripts
*/
OPTIONS RESULTS
OPTIONS FAILAT 20
PARSE ARG archiv screenname
IF archiv = '' | screenname = '' THEN
quit('Format: FilterPuffer <LHa-Archiv oder Pufferdatei> <Name des Public-Screen>',10)
IF ~EXISTS(archiv) THEN
quit('Die Datei' archiv 'existiert nicht!',10)
IF ~SHOW(LIBRARIES,'rexxsupport.library') THEN
IF ~ADDLIB('rexxsupport.library',0,-30,0) THEN
quit('Kann die <rexxsupport.library> nicht öffnen!',10)
/*
** Pfad des temporären Verzeichnisses 'tempdir' zusammensetzen
*/
IF RIGHT(tempdir,1) ~= '/' & RIGHT(tempdir,1) ~= ':' THEN
tempdir = tempdir||'/WILAM-04431-92081'
ELSE
tempdir = tempdir||'WILAM-04431-92081'
/*
** 'tempdir' neu anlegen
*/
IF EXISTS(tempdir) THEN
ADDRESS COMMAND 'Delete "'||tempdir||'" ALL QUIET'
IF ~MAKEDIR(tempdir) THEN
quit('Verzeichnis' tempdir 'kann nicht angelegt werden!',10)
/*
** Pufferdatei öffnen, die ersten 7 Bytes einlesen und wieder schließen
*/
IF ~OPEN('testfile',archiv,'READ') THEN
quit('Fehler beim Öffnen der Pufferdatei' archiv||'!',rc)
string = READCH('testfile',7)
CLOSE('testfile')
/*
** Überprüfen ob die Pufferdatei mit LHA, LZX oder ZIP gepackt, oder
** ungepackt ist. Dann entsprechend nach 'tempdir' entpacken oder kopieren.
*/
SELECT
WHEN SUBSTR(string,3,3) = '-lh' & DATATYPE(SUBSTR(string,6,1)) = 'NUM' & RIGHT(string,1) = '-' THEN DO
SAY 'Entpacke LHA-Archiv "'||archiv||'" nach "'||tempdir||'/"'||'0a'x
ADDRESS COMMAND lha 'x -X' archiv '"'||tempdir||'/"'
END
WHEN SUBSTR(string,1,3) = 'LZX' THEN DO
SAY 'Entpacke LZX-Archiv "'||archiv||'" nach "'||tempdir||'/"'||'0a'x
ADDRESS COMMAND lzx '-X0 x' archiv '"'||tempdir||'/"'
END
WHEN SUBSTR(string,1,4) = 'PK'||'03'x||'04'x THEN DO
SAY 'Entpacke ZIP-Archiv "'||archiv||'" nach "'||tempdir||'/"'||'0a'x
olddir=PRAGMA('D',tempdir)
tarchiv=olddir
IF RIGHT(tarchiv,1) ~= '/' &RIGHT(tarchiv,1) ~= ':' THEN
tarchiv=tarchiv||'/'
tarchiv=tarchiv||archiv
IF UPPER(RIGHT(tarchiv,4)) = '.ZIP' THEN
tarchiv=LEFT(tarchiv,LENGTH(tarchiv)-4)
ADDRESS COMMAND unzip '-x "'||tarchiv||'"'
olddir=PRAGMA('D',olddir)
END
OTHERWISE DO
SAY 'Kopiere "'||archiv||'" nach "'||tempdir||'/'||archiv||'"'
ADDRESS COMMAND 'copy' archiv '"'||tempdir||'/'||archiv||'"'
END
END
IF rc ~= 0 THEN
quit('Fehler beim Entpacken/Kopieren der Pufferdatei' archiv||'!',rc)
SAY
/*
** Alle Filenamen auslesen
*/
filestring = SHOWDIR(tempdir,'FILE')
anzfiles = WORDS(filestring)
IF anzfiles = 0 THEN
quit('Die Pufferdatei enthielt keine Daten!',10)
/*
** Testen, ob MailFilter gestartet ist. Wenn nicht, dann jetzt starten
*/
IF ~SHOW(PORTS,'MAILFILTER') THEN DO
ADDRESS COMMAND
'run >NIL: <NIL: MAILFILTER:MailFilter'
DO 3 WHILE ~SHOW(PORTS,'MAILFILTER')
'WaitForPort MAILFILTER'
END
IF rc = 5 THEN
quit('Kann MailFilter nicht starten!',10)
END
/*
** Damit der neue Puffer nicht an eine eventuell bestehende Datei
** 'PUFFER' angehängt wird, wird diese jetzt gelöscht. Wenn das
** gerade empfangene Archiv ebenfalls 'PUFFER' heißt wird es nicht
** gelöscht, sondern in 'PUFFER.old' umbenannt.
*/
IF EXISTS('PUFFER.old') THEN
CALL DELETE('PUFFER.old')
IF EXISTS('PUFFER') THEN DO
IF UPPER(archiv) = 'PUFFER' THEN
CALL RENAME('PUFFER','PUFFER.old')
ELSE
CALL DELETE('PUFFER')
END
/*
** Aktuelles Verzeichnis ermitteln und den Pfad der Datei 'PUFFER'
** zusammensetzen, weil MailFilter zum Filtern den kompletten Pfad
** des Zielpuffers benötigt.
*/
pfad = PRAGMA(D)
IF RIGHT(pfad,1) ~= '/' & RIGHT(pfad,1) ~= ':' THEN
pufferdatei = pfad||'/PUFFER'
ELSE
pufferdatei = pfad||'PUFFER'
/*
** Aktuellen ZPoint-Screen einstellen
*/
ADDRESS MAILFILTER
GETATTR screen
IF result ~= screenname THEN DO
DEACTIVATE
SETATTR screen screenname
END
/*
** Alle Files aus dem temporären Verzeichnis lesen, filtern und
** im aktuellen Verzeichnis unter dem Namen 'PUFFER'abspeichern.
*/
DO i = 1 TO anzfiles
SAY 'Filtern von' WORD(filestring,i) '...'
FILTER 'FROM "'||tempdir||'/'||WORD(filestring,i)||'" TO "'||pufferdatei||'" JOIN'
IF rc ~= 0 THEN
quit('Fehler beim Filtern der Datei' WORD(filestring,i) rc2,rc)
END
/*
** Einstellungen speichern, damit bei allen verwendeten
** Filtereinträgen das aktuelle Datum vermerkt wird.
*/
SAVE
/*
** 'tempdir' komplett löschen
*/
ADDRESS COMMAND 'Delete "'||tempdir||'" ALL QUIET'
QUIT FORCE
EXIT(0)
/*
** Script mit Meldung beenden
*/
quit:
PARSE ARG message,rcode
IF message ~= '' THEN
SAY message
IF OPEN('con','*','WRITE') THEN DO
CALL WRITECH('con','0A'x||'Bitte <RETURN> drücken')
CALL READLN('con')
END
EXIT(rcode)